package com.geek.water.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author yangwenqi
 * @decs TODO
 * @date 2025/8/3
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName("t_invoice") // 指定数据库表名
public class Invoice {

    @TableId(value = "id", type = IdType.AUTO) // 主键自增
    private Long id;

    @TableField("bill_code") // 账单编号（与账单表关联）
    private String billCode;

    @TableField("invoice_code") // 发票代码
    private String invoiceCode;

    @TableField("invoice_number") // 发票号码
    private String invoiceNumber;

    @TableField("check_code") // 校验码
    private String checkCode;

    @TableField("machine_code") // 机器编号
    private String machineCode;

    @TableField("buyer_name") // 购方名称
    private String buyerName;

    @TableField("buyer_tax_code") // 购方税号
    private String buyerTaxCode;

    @TableField("buyer_address_phone") // 购方地址电话
    private String buyerAddressPhone;

    @TableField("buyer_bank_account") // 购方银行账号
    private String buyerBankAccount;

    @TableField("seller_name") // 销方名称（默认值在业务层设置）
    private String sellerName;

    @TableField("seller_tax_code") // 销方税号（默认值在业务层设置）
    private String sellerTaxCode;

    @TableField("seller_address_phone") // 销方地址电话（默认值在业务层设置）
    private String sellerAddressPhone;

    @TableField("seller_bank_account") // 销方银行账号（默认值在业务层设置）
    private String sellerBankAccount;

    @TableField("amount_in_figuers") // 金额(数字)
    private BigDecimal amountInFiguers;

    @TableField("amount_in_words") // 金额(大写)
    private String amountInWords;

    @TableField("type") // 发票类型
    private String type;

    @TableField("invoice_date") // 开票日期
    private LocalDate invoiceDate;

    @TableField("receiptor") // 收款人
    private String receiptor;

    @TableField("issuer") // 开票人
    private String issuer;

    @TableField("reviewer") // 复核人
    private String reviewer;

    @TableField("remark") // 备注
    private String remark;

    @TableField("invoice_url") // 发票下载地址
    private String invoiceUrl;

    @TableField("status") // 状态
    private String status;

    @TableField("error_message") // 错误信息
    private String errorMessage;

    @TableField(value = "create_at", fill = FieldFill.INSERT) // 创建时间 - 插入时自动填充
    private LocalDateTime createdAt;

    @TableField(value = "update_at", fill = FieldFill.INSERT_UPDATE) // 更新时间 - 插入和更新时自动填充
    private LocalDateTime updatedAt;

}